package com.mf.ergate.web.common.utils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 汉语拼音工具类
 * User: zhaoming
 * Date: 2018-03-01
 * To change this template use File | Settings | File Templates.
 */
public class PinyinUtils {

    /**
     * 将文字转为汉语拼音
     * @param chineseLanguage 要转成拼音的中文
     * @return 转换后的拼音
     */
    public static String getPinyin(String chineseLanguage){
        char[] cl_chars = chineseLanguage.trim().toCharArray();
        String hanyupinyin = "";
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出拼音全部小写
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
        defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V) ;
        try {
            for (int i=0; i<cl_chars.length; i++){
                if (String.valueOf(cl_chars[i]).matches("[\u4e00-\u9fa5]+")){// 如果字符是中文,则将中文转为汉语拼音
                    hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0];
                } else {// 如果字符不是中文,则不转换
                    hanyupinyin += cl_chars[i];
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            throw new RuntimeException(e.getMessage(), e);
        }
        return hanyupinyin;
    }

    /**
     * 获取拼音首字母并转换成大写格式
     * @param chineseLanguage 要转成拼音的中文
     * @return 要转成拼音的首字母
     */
    public static String getPinyinFirstLettersToUpper(String chineseLanguage){
        return getPinyinFirstLetters(chineseLanguage ,HanyuPinyinCaseType.UPPERCASE);
    }

    /**
     * 获取拼音首字母并转换成小写格式
     * @param chineseLanguage 要转成拼音的中文
     * @return 要转成拼音的首字母
     */
    public static String getPinyinFirstLettersToLower(String chineseLanguage){
        return getPinyinFirstLetters(chineseLanguage ,HanyuPinyinCaseType.LOWERCASE);
    }

    /**
     * 获取拼音首字母并格式化
     * @param chineseLanguage 要转成拼音的中文
     * @param caseType 格式化类型
     * @return 要转成拼音的首字母
     */
    private static String getPinyinFirstLetters(String chineseLanguage, HanyuPinyinCaseType caseType) {
        char[] characters = chineseLanguage.trim().toCharArray();
        String result = "";
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(caseType);                            // 输出拼音全部大写
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);    // 不带声调
        try {
            for(char character : characters){
                String str = String.valueOf(character);
                if (str.matches("[\u4e00-\u9fa5]+")) {
                    // 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
                    result += PinyinHelper.toHanyuPinyinStringArray(character, defaultFormat)[0].substring(0, 1);
                } else if (str.matches("[0-9]+")) {
                    // 如果字符是数字,取数字
                    result += str;
                } else if (str.matches("[a-zA-Z]+")) {
                    // 如果字符是字母,取字母
                    result += str.toUpperCase();
                }else{
                    result += str;
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            throw new RuntimeException(e.getMessage(), e);
        }
        return result;
    }
}